package 剑指offer_专项突击版.中等;

/**
 * 给定一个字符串 s ，验证 s 是否是 回文串 ，只考虑字母和数字字符，可以忽略字母的大小写。
 * <p>
 * 本题中，将空字符串定义为有效的 回文串 。
 * <p>
 *  
 * <p>
 * 示例 1:
 * <p>
 * 输入: s = "A man, a plan, a canal: Panama"
 * 输出: true
 * 解释："amanaplanacanalpanama" 是回文串
 * 示例 2:
 * <p>
 * 输入: s = "race a car"
 * 输出: false
 * 解释："raceacar" 不是回文串
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/XltzEq
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author caihe
 * @date 2022/12/30 14:40
 */
public class _018_有效的回文 {


    public static void main(String[] args) {
        _018_有效的回文 a = new _018_有效的回文();
        a.isPalindrome("aa");
    }


    public boolean isPalindrome(String s) {
        for (int i = 0, j = s.length() - 1; i < j; ) {
            char a  = Character.toLowerCase(s.charAt(i));
            char b  = Character.toLowerCase(s.charAt(j));
            if (!check(a)) {
                i++;
                continue;
            }
            if (!check(b)) {
                j--;
                continue;
            }
            
            if (a != b) {
                return false;
            }
            
            i++;
            j--;
        }

        return true;
    }
    
    private boolean check(char a) {
        return (a >= 'a' && a <= 'z') || (a >= '0' && a <= '9');
    }

}
